import os
from pydantic_settings import BaseSettings
from typing import Optional

## 项目根目录
PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(os.path.dirname(__file__)), ".."))


class Settings(BaseSettings):
    ## 路径基础配置
    PROJECT_ROOT : str = PROJECT_ROOT
    LOG_DIR : str = os.path.join(PROJECT_ROOT, "logs")
    
    """应用配置"""
    
    # 基础配置
    debug: bool = True

    ## 项目前端口的 运行地址
    cors_origins: list = ["http://localhost:5173", "http://127.0.0.1:5173"]
    ## fastapi 项目后端 运行地址
    APP_HOST : str = "0.0.0.0"
    APP_PORT : int = 8000

    # 认证配置
    enable_auth: bool = True  # 是否启用JWT认证
    auth_whitelist: list = ["/docs", "/openapi.json", "/redoc", "/auth/login"]  # 无需认证的路径  白名单
    
    # # 功能模块控制配置  启用如下
    # enable_database: bool = True  # 是否启用数据库功能
    # enable_user_system: bool = True  # 是否启用用户系统
    # enable_user_registration: bool = True  # 是否启用用户注册验证
    # enable_auto_init_data: bool = True  # 是否自动初始化默认数据
    # enable_operation_logging: bool = True  # 是否启用操作日志

    # 功能模块控制配置  禁用如下
    enable_database: bool = False  # 是否启用数据库功能
    enable_user_system: bool = False  # 是否启用用户系统
    enable_user_registration: bool = False  # 是否启用用户注册验证
    enable_auto_init_data: bool = False  # 是否自动初始化默认数据
    enable_operation_logging: bool = False  # 是否启用操作日志


    # 数据库配置（分离配置）
    database_host: str = "test"
    database_port: int = 3306
    database_user: str = "root"
    database_password: str = ""
    database_name: str = "fastapi_common"
    
    # 数据库其他配置
    database_pool_size: int = 10
    database_echo: bool = False
    database_auto_create: bool = True
    
    # 功能开关
    enable_database: bool = True
    enable_auto_init_data: bool = True
    
    # OpenAI配置
    openai_api_key: str = "your_openai_api_key_here"
    openai_base_url: str = "https://api.openai.com/v1"
    openai_model: str = "gpt-3.5-turbo"
    openai_max_tokens: int = 200
    openai_temperature: float = 0.8
    
    ### 秘钥相关配置 ###
    SECRET_KEY: str = "3488a63e1765035d386f05409663f55c83bfae3b3c61a932744b20ad14244dcf"  # openssl rand -hex 32
    JWT_ALGORITHM: str = "HS256"
    JWT_ACCESS_TOKEN_EXPIRE_MINUTES: int = 60 * 24 * 7  # 7 day
    
    class Config:
        env_file = ".env"
        case_sensitive = False


# 全局配置实例
settings = Settings()